home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / smtk.doc < prev    next >
Text File  |  1995-03-31  |  42KB  |  991 lines

  1.            888                      8   8   8 
  2.           8   8                     8   8  8 
  3.           8     88 8    888  8 888 888  8 8    888  8   8  8888 
  4.            888  8 8 8      8 88     8   88    8   8 8   8 8 
  5.               8 8 8 8   8888 8      8   8 8   88888 8   8  888 
  6.           8   8 8 8 8  8   8 8      8 8 8  8  8      8888     8 
  7.            888  8   8   8888 8       8  8   8  888      8 8888 
  8.                                                      888 
  9.  
  10.  
  11.                                    by 
  12.  
  13.                            Simone A. Rapisarda 
  14.  
  15.                               Version 1.23 
  16.  
  17.                               12 July 1992 
  18.  
  19.  
  20.  
  21. [Note: If you ever use USER mode, then you need this library!  It makes the 
  22.  creation and deletion of key assignments easier, faster, and *far* more 
  23.  powerful.  Check it out!  -jkh-] 
  24.  
  25.  
  26.  
  27. The following document is divided into four parts: 
  28.  
  29.  
  30.  1  - Introduction 
  31.  
  32.  2  - SmartKeys Commands 
  33.  
  34.  3  - Command Usage Examples 
  35.  3.1  Commands used:  IFPRGTE ASNK 
  36.  3.2  Commands used: STDK  IFCMDTE ASNK 
  37.  3.3  Commands used: KEYN RECK ASNK 
  38.  3.4  Commands used:  PSH  EVL  IFPRGTE  EDIT  IFCMDTE 
  39.  3.5  Command used: SAFE 
  40.  
  41.  4  - Some useful information 
  42.  4.1  The Internal UserKeys list 
  43.  4.2  Unused and Useless HP48 Default Key Assignments 
  44.  4.3  Another suggestion for keys-hungry HP48 users 
  45.  
  46.  
  47.  
  48.  
  49. 1  - Introduction 
  50. ííííííííííííííííí 
  51.  
  52. SmartKeys is a library of utilities designed to increase the power of the 
  53. already powerful HP48 user keyboard capability. It is a self-attaching 
  54. library entirely written in system-RPL (mostly using PMC). It's 3391 bytes 
  55. long and is identified by the library ID 1616. The twenty nine commands 
  56. it contains were conceived for these fundamental purposes: 
  57.  
  58. - Facilitate the usage of key assignments. 
  59.   Commands: ASNK RCLK DELK KEYN PACKKEYS 
  60.  
  61. - Increase the speed of user keyboard operations. 
  62.   Commands: ASNK RCLK DELK KEYN PACKKEYS GETKEYS PUTKEYS ADDFR 
  63.  
  64. - Save key assignment memory. 
  65.   Commands: ASNK DELK STDK PACKKEYS 
  66.  
  67. - Allow special key assignments normally not supported. 
  68.   Commands: STDK RECK  EVL  PSH  EDIT  EQW  IFCMDTE  IFIMMTE 
  69.              IFPRGTE  IFALGTE 'BADK 
  70.  
  71. - Increase the number of possible assignments on a single key. 
  72.   Commands:  IFCMDTE  IFIMMTE  IFPRGTE  IFALGTE DUAL 
  73.  
  74. - Fill the gaps in the HP48 default key assignments. 
  75.   Commands: STDK RECK  IFCMDTE  IFIMMTE  IFPRGTE  IFALGTE 
  76.  
  77. - Allow the usage of more than one user keyboard. 
  78.   Commands: USRM RCUSR STUSR DOUSR DLUSR GETKEYS PUTKEYS 
  79.  
  80. - Help the user keyboard always stay active. 
  81.   Command: $CONFIG (hidden) 
  82.  
  83. - Provide a way to transform dangerous programs into "Safe" programs. 
  84.   Command: SAFE 
  85.  
  86. - Library version number and copyright owner. 
  87.   Command: ABOUTSK 
  88.  
  89. - Tree-structured menus 
  90.   Commands:  TDIR TDIR  
  91.  
  92. NOTES: English is not my native language and it was not one of my favourite 
  93.        subjects at school. I have done my very best to write this document in 
  94.        an understandable form but I might not succeed, so I hope you will 
  95.        excuse the simple words I use and any possible mistake or impropriety. 
  96.  
  97.        SmartKeys 1.23 has been validated on an HP48 revision E.  It should 
  98.        work fine for HP 48 revisions A through E.  It may not work correctly 
  99.        for later HP 48 revisions. 
  100.  
  101.        The SmartKeys library is distributed in the hope that it will be 
  102.        useful; even if its commands have been tested (on a HP48 rev E) they 
  103.        make use of undocumented features, so use them at your own risk: I 
  104.        take no responsibility for any damage caused by their use or misuse. 
  105.        The SmartKeys library and this document are Copyright 1992 by Simone 
  106.        A. Rapisarda. Non-commercial distribution is allowed and encouraged if 
  107.        this document, unchanged, accompanies the unmodified library. 
  108.  
  109.        The internal SAFE (XLIB 1616 32) and the internal DUAL (XLIB 1616 40) 
  110.        can be extracted and used in other libraries only if these are Public 
  111.        Domain, Freeware or Giftware. This can be done only with my written 
  112.        consent that must be reported in the documentation of the library. 
  113.  
  114.        I would like to thank the following people: 
  115.  
  116.        - Joe Horn, Flavia Majlis, Pablo Majlis and Roberto Taddei for their 
  117.          precious help in writing the documentation and their pacience in 
  118.          translating the pieces of my imaginary English into real English. 
  119.  
  120.        - Flavia Majlis again, who created the beautiful SmartKeys screen 
  121.          displayed by the command ABOUTSK. 
  122.  
  123.        - Rick Grevelle, for his wonderful HACKIT library that helped me a lot 
  124.          in developing SmartKeys and discovering all the HP48 undocumented 
  125.          features used in it. 
  126.  
  127.        - Most of the entry points used to compile the SmartKeys library are 
  128.          documented in a list supplied by Jake Schwartz.  I thank him and all 
  129.          the contributors to that list. 
  130.  
  131.        SmartKeys is GiftWare. This means that if after a period of evaluation 
  132.        you find it useful and you think I deserve a contribution for all the 
  133.        time I spent working on it (not a little, believe me!), feel free to 
  134.        send me a gift: cookies, chocolate, cakes, Alka-Seltzer, a 512K ram 
  135.        card  etc. ;-). But if you can't afford a gift don't worry; a postcard 
  136.        to the following address will be also welcome: 
  137.  
  138.        Simone A. Rapisarda 
  139.        via Livia Gereschi 6 
  140.        56127  PISA 
  141.               ITALY 
  142.  
  143.        If you have comments, suggestions, questions, criticisms or you just 
  144.        want to say "That's a nice toy!", I would really like to receive Email 
  145.        at the following address: 
  146.  
  147.        Simone.Rapisarda@p10.f800.n33.z2.fidonet.org 
  148.  
  149.  
  150.  
  151.  
  152. 2  - SmartKeys Commands 
  153. ííííííííííííííííííííííí 
  154.  
  155. If you aren't familiar with the user keyboard I suggest you first read the 
  156. Paragraph "The User Keyboard" at page 216 of the HP48 manual.  All of the 
  157. SmartKeys commands other than the obvious ones have examples below. 
  158.  
  159. - All the SmartKeys commands *except PUTKEYS* do complete argument checking 
  160.   and are "idiot proof" so it's very unlikely that using them would cause a 
  161.   disaster. However, the evaluation of the programs created by the  etc. 
  162.   commands may be catastrophic so always backup your memory unless you know 
  163.   exactly what you are doing. 
  164.  
  165. - The built-in commands ASN, STOKEYS and DELKEYS, in my opinion, are not well 
  166.   written. The SmartKeys commands ASNK, DELK and PACKKEYS have been written 
  167.   using some contrivances in order to save a theoretical maximum of 1470 
  168.   bytes in the internal UserKeys list. If you want to take advantage of this 
  169.   it's best not to use the built-in commands ASN, STOKEYS and DELKEYS at 
  170.   all, and use SmartKeys commands exclusively. 
  171.  
  172. - The commands ASNK, RCLK, DELK and STDK(1) support all six possible 
  173.   assignments for all keys, except some combinations of the two shift keys, 
  174.   obviously. 
  175.  
  176. - The commands ASNK, RCLK, DELK, GETKEYS, PUTKEYS and PACKKEYS work 
  177.   only on the current UserKeys list. 
  178.  
  179. - rc.p represents a real that identifies a key location: r stands for row, 
  180.   c stands for column and p stands for plane. 
  181.  
  182. The normal HP 48 keyboard has several keys that behave strangely.  For 
  183.   example, the CLVAR key (blue-DEL key), has a built-in safety feature: it 
  184.   doesn't execute immediately, but instead puts itself onto the command line, 
  185.   so that you must then press ENTER if you really want it to execute.  This 
  186.   allows you to press ATTN to clear the command line if you pressed CLVAR by 
  187.   mistake.  This is therefore called a "safe" key.  SmartKeys allows you to 
  188.   create your own safe key assignments and functions.  Its own DLUSR command 
  189.   is a safe command. 
  190.  
  191. SmartKeys even allows you to create "dual" keys and functions, which are like 
  192.   safe keys except that the action performed from the keyboard is up to you. 
  193.   Many of the SmartKeys commands are dual functions; for example, ABOUTSK 
  194.   displays an "about" screen when pressed from the keyboard; but, when 
  195.   executed from a program (or command line), it places the SmartKeys version 
  196.   string on the stack ("1.23"). 
  197.  
  198.  
  199. Commands in the SmartKeys menus: 
  200.  
  201. úÄÄÄÄÄÄÄÄÄÄâÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄâÄÄÄÄÄÄÄÄÄÄÄÄÄÄâÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄâÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  202. 3  Page 1  3    Page 2     3     Page 3   3     Page 4     3     Page 5   3 
  203. ~AÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  204. 3          3               3              3                3              3 
  205. 3  0 ASNK  3   6 USRM      3  12 GETKEYS  3  18  IFCMDTE   3  24 ADDFR    3 
  206. 3  1 RCLK  3   7 STUSR     3  13 PUTKEYS  3  19  IFIMMTE   3  25 'BADK    3 
  207. 3  2 DELK  3   8 RCUSR     3  14  EVL     3  20  IFPRGTE   3  26 SAFE     3 
  208. 3  3 STDK  3   9 DOUSR     3  15  PSH     3  21  IFALGTE   3  27 DUAL     3 
  209. 3  4 RECK  3  10 DLUSR     3  16  EDIT    3  22  TDIR      3  28 ABOUTSK  3 
  210. 3  5 KEYN  3  11 PACKKEYS  3  17  EQW     3  23 TDIR       3              3 
  211. 3          3               3              3                3              3 
  212. àÄÄÄÄÄÄÄÄÄÄáÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄáÄÄÄÄÄÄÄÄÄÄÄÄÄÄáÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄáÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  213.  
  214.  
  215. The following is a description of each of the twenty nine commands contained 
  216. in the SmartKeys Library. 
  217.  
  218. úÄÄÄÄÄÄ¿ 
  219. 3 ASNK 3       (ASsigN Key) 
  220. àÄÄÄÄÄÄù       (see example below) 
  221.  
  222. Needs one argument: (1:Any). 
  223.  
  224. Waits for a key to be pressed and assigns the object in level one to that 
  225. key. If an object is already assigned to that key, the command LASTARG, if 
  226. active, will push to level one the old assignment. ASNK accepts an empty list 
  227. instead of the global name 'SKEY' (to force a key to have its standard 
  228. definition) in order to save keystrokes. 
  229.  
  230. úÄÄÄÄÄÄ¿ 
  231. 3 RCLK 3         (ReCalL Key) 
  232. àÄÄÄÄÄÄù 
  233.  
  234. Needs no arguments. 
  235.  
  236. Waits for a key to be pressed and recalls to level one the object assigned to 
  237. that key. If no object is assigned to that key, the HP48 will just beep. 
  238.  
  239. úÄÄÄÄÄÄ¿ 
  240. 3 DELK 3         (DELete Key) 
  241. àÄÄÄÄÄÄù 
  242.  
  243. Needs no arguments. 
  244.  
  245. Waits for a key to be pressed and deletes the assignment of that key. If no 
  246. object is assigned to that key, the HP48 will just beep. If an object is 
  247. assigned to that key, the command LASTARG, if active, will push to level 
  248. one the old assignment. 
  249.  
  250. úÄÄÄÄÄÄ¿ 
  251. 3 STDK 3       (recall STandarD Key definition) 
  252. àÄÄÄÄÄÄù       (see example below) 
  253.  
  254. This is a "DUAL" command: 
  255.  
  256. (1) When executed from the keyboard: 
  257.  
  258.    Needs no arguments. 
  259.  
  260.    Waits for a key to be pressed and recalls the standard assignment of that 
  261.    key. 
  262.  
  263. (2) When executed by a running program: 
  264.  
  265.    Needs one argument: (1:Real). 
  266.  
  267.    Since not all the standard key assignments can be recalled using 
  268.    method (1), this second way is provided. The Real on level one must be 
  269.    in the same format as required by the built-in command ASN (rc.p). The 
  270.    standard assignment of the specified key is recalled to level one. 
  271.  
  272. úÄÄÄÄÄÄ¿ 
  273. 3 RECK 3      (RECord Keys) 
  274. àÄÄÄÄÄÄù      (see example below) 
  275.  
  276. This is a "DUAL" command: 
  277.  
  278. (1) When executed from the keyboard: 
  279.  
  280.    Needs no arguments. 
  281.  
  282.    Records a sequence of two or more standard keys. The only thing that 
  283.    distinguishes this recording session from the normal state is the message 
  284.    RECK displayed in the status area instead of USER. To finish the recording 
  285.    session you need to press [alpha] [CONT] (key 91.5) or cause an Error 
  286.    (the key that caused the error will not be recorded). At this point a 
  287.    program will be pushed to level one (this will not happen if you have 
  288.    recorded only one key. Use STDK for this), that is the record: its 
  289.    evaluation will cause the key sequence reproduction; it doesn't need to be 
  290.    processed by  EVL. For a correct evaluation, assign it to a key or store 
  291.    it in a Global variable. 
  292.  
  293.    RECK will record every key except those pressed while running a program, 
  294.    even the built-in programs, e.g. the EquationWriter, or the standard 
  295.    editor. For example, while recording, you can edit something but the keys 
  296.    pressed while you are in the editor (*not in the command line*) will not 
  297.    be recorded, and the recording session will restart when you exit from the 
  298.    editor. 
  299.  
  300. (2) When executed by a running program: 
  301.  
  302.    Needs one argument: (1:List). 
  303.  
  304.    The list must contain more than one Real number in rc.p format: the 
  305.    corresponding key sequence will be created on level one as for (1). 
  306.    The same limitations as for (1) apply. 
  307.  
  308. úÄÄÄÄÄÄ¿ 
  309. 3 KEYN 3       (KEY Number) 
  310. àÄÄÄÄÄÄù       (see example below) 
  311.  
  312. Needs no arguments. 
  313.  
  314. Asks you to press a key and puts its number in rc format on level one; then 
  315. you have to press a key between [1] and [6] (any other key will just beep) to 
  316. complete the result with the key plane so that the real on level one will be 
  317. in rc.p format.  This allows you to get the rc.p key number of any key, 
  318. including the shifted shift keys. 
  319.  
  320. úÄÄÄÄÄÄ¿ 
  321. 3 USRM 3       (USeR keyboards Menu) 
  322. àÄÄÄÄÄÄù 
  323.     
  324. Needs no arguments, but DOUSR must have been executed beforehand. 
  325.  
  326. Displays the User Keyboards Menu created by the command DOUSR. This is a 
  327. normal menu, similar to the MODES one. It allows you to switch easily and 
  328. rapidly between all the user keyboards you have created. If USER mode is not 
  329. active, USRM activates it. 
  330.  
  331. úÄÄÄÄÄÄÄ¿ 
  332. 3 STUSR 3      (SelecT USeR keyboard) 
  333. àÄÄÄÄÄÄÄù 
  334.  
  335. Need one argument: (1:Real) 
  336.  
  337. Activates the corresponding User Keyboard. The same result can be obtained by 
  338. pressing the corresponding named key in the User Keyboards Menu displayed by 
  339. USRM.  If USER mode is not active, STUSR activates it. 
  340.  
  341. úÄÄÄÄÄÄÄ¿ 
  342. 3 RCUSR 3      (ReCall USeR keyboard) 
  343. àÄÄÄÄÄÄÄù 
  344.  
  345. Needs no arguments. 
  346.  
  347. Recalls the number of the active User Keyboard and tags it with its name. If 
  348. there is only one User Keyboard, the result will be a zero tagged with the 
  349. string "Undefined". 
  350.  
  351. úÄÄÄÄÄÄÄ¿ 
  352. 3 DOUSR 3      (DO USeR keyboards) 
  353. àÄÄÄÄÄÄÄù 
  354.  
  355. Needs one argument: (1:List) 
  356.  
  357. It creates as many User Keyboards as specified by the dimension of the list. 
  358. The only limit to this dimension is the amount of available memory. The 
  359. memory occupied by an empty UserKeys list is only few bytes. The first object 
  360. of the list is used to name the current User Keyboard. The other objects are 
  361. used to name each new keyboard (initially empty).  DOUSR will not overwrite 
  362. an existing User Keyboards menu; if attempted, DOUSR gives the "Object In 
  363. Use" error. 
  364.  
  365. úÄÄÄÄÄÄÄ¿ 
  366. 3 DLUSR 3      (DeLete USeR keyboards) 
  367. àÄÄÄÄÄÄÄù 
  368.  
  369. This is a "SAFE" command. 
  370.  
  371. Needs no arguments. 
  372.  
  373. It deletes all the User Keyboards except the current one.  DLUSR has no 
  374. effect if multiple User Keyboards are not defined.  DLUSR is required before 
  375. executing DOUSR if multiple User Keyboards already exist. 
  376.  
  377. úÄÄÄÄÄÄÄÄÄÄ¿ 
  378. 3 PACKKEYS 3 
  379. àÄÄÄÄÄÄÄÄÄÄù 
  380.  
  381. Needs no arguments. 
  382.  
  383. Packs the user key assignments into their most compact form to save memory. 
  384. As user key assignments are made or deleted using the built-in commands ASN, 
  385. STOKEYS, and DELKEYS, a certain amount of memory is wasted. You can free this 
  386. memory for other uses by packing the user key assignment with PACKKEYS. You 
  387. don't need to PACKKEYS after the SmartKeys commands ASNK and DELK; they pack 
  388. the key assignments automatically. 
  389.  
  390. Note: The command sequence described in the HP 48 Owner's Manual on page 220 
  391.       [page 15-10 in the newer, single-volume Owner's Manual], RCLKEYS 0 
  392.       DELKEYS STOKEYS, has a little bug/feature: if the unassigned keys are 
  393.       disabled (by 'S' DELKEYS), after its execution they will be all be 
  394.       enabled. The command PACKKEYS, instead, does not change the unassigned 
  395.       keys state. It also packs the user key assignments into a more compact 
  396.       form almost immediately, unlike the Owner's Manual routine, which is 
  397.       very slow. 
  398.  
  399. úÄÄÄÄÄÄÄÄÄ¿ 
  400. 3 GETKEYS 3 
  401. àÄÄÄÄÄÄÄÄÄù 
  402.  
  403. Needs no arguments. 
  404.  
  405. Pushes to level two the current internal Userkeys list and to level one the 
  406. real 1 if unassigned keys are enabled or the real 0 if unassigned keys are 
  407. disabled. 
  408.  
  409. For information on the format of the internal Userkeys list refer to 
  410. paragraph 4.1 of this document. 
  411.  
  412. úÄÄÄÄÄÄÄÄÄ¿ 
  413. 3 PUTKEYS 3 
  414. àÄÄÄÄÄÄÄÄÄù 
  415.  
  416. Needs two arguments: (2:List, 1:Real). 
  417.  
  418. Stores the list on level two as the current internal Userkeys list and the 
  419. real on level one as the state of unassigned keys: 0 stands for "disabled"; 
  420. any other number stands for "enabled". 
  421.  
  422. For information on the format of the internal Userkeys list refer to 
  423. paragraph 4.1 of this document. 
  424.  
  425. BE CAREFUL: This is a very dangerous command. It doesn't check if the list on 
  426.             level two contains a valid user keyboard (this was done in order 
  427.             to minimize execution time) so the list MUST be in its internally 
  428.             correct format to prevent a disaster. 
  429.  
  430.             The safest way to use PUTKEYS is only with an internal UserKeys 
  431.             list obtained from GETKEYS (as the arguments obtained from 
  432.             GETKEYS are the same required by PUTKEYS). 
  433.  
  434.             If you PUTKEYS with a 0 on level 1, your keyboard may lock up. To 
  435.             recover from this situation just press ON-C (only if flag 49 is 
  436.             clear) or press the reset button under one of the rubber feet on 
  437.             the back of the HP48; just pry out the foot and poke a paper clip 
  438.             into the hole. 
  439.  
  440. úÄÄÄÄÄÄ¿ 
  441. 3  EVL 3     (make "EVaLuate immediately" program) 
  442. àÄÄÄÄÄÄù     (see example below) 
  443.  
  444. Needs one argument: (1:Any). 
  445.  
  446. Leaves on level one a program that when assigned to a key, or stored in a 
  447. menu, is evaluated immediately, even during command line entry (like the RAD 
  448. key). 
  449.  
  450. úÄÄÄÄÄÄ¿ 
  451. 3  PSH 3       (make "PuSH unevaluated immediately" program) 
  452. àÄÄÄÄÄÄù       (see example below) 
  453.  
  454. Needs one argument: (1:Any). 
  455.  
  456. Leaves on level one a program that when assigned to a key, or stored in a 
  457. menu, pushes the argument unevaluated to the first level of the stack, even 
  458. during command line entry. 
  459.  
  460. úÄÄÄÄÄÄÄ¿ 
  461. 3  EDIT 3      (make "EDIT only" program) 
  462. àÄÄÄÄÄÄÄù      (see example below) 
  463.  
  464. Needs one argument: (1:Any). 
  465.  
  466. Leaves on level one a program that when assigned to a key, or stored in a 
  467. menu, inserts the argument in the Command Line at the position of the cursor. 
  468. If there is no command line, it is created. 
  469.  
  470. úÄÄÄÄÄÄ¿ 
  471. 3  EQW 3       (make "EQuationWriter-able" program) 
  472. àÄÄÄÄÄÄù 
  473.  
  474. Needs one argument: (1:Any). 
  475.  
  476. This is a powerful type of  EVL: the object processed by this command and 
  477. assigned to a key can be executed also while the Equation Writer is active; 
  478. but remember, the stack *must* always be left intact by the operation. The 
  479. only part of the display allowed to be affected by such an operation is the 
  480. menu bar. 
  481.  
  482. úÄÄÄÄÄÄÄÄÄÄ¿ 
  483. 3  IFCMDTE 3   (make "IF CoMmanD line Then Else" program) 
  484. àÄÄÄÄÄÄÄÄÄÄù   (see example below) 
  485.  
  486. Needs two arguments: (2:Any, 1:Any). 
  487.  
  488. Leaves on level one a program that when evaluated will: 
  489. - Check if there is a Command Line. 
  490. - If yes, evaluate the level two argument. 
  491. - If not, evaluate the level one argument. 
  492. The resulting program doesn't need to be processed by  EVL. 
  493.  
  494. úÄÄÄÄÄÄÄÄÄÄ¿ 
  495. 3  IFIMMTE 3   (make "IF IMMediate-entry mode Then Else" program) 
  496. àÄÄÄÄÄÄÄÄÄÄù 
  497.  
  498. Needs two arguments: (2:Any, 1:Any). 
  499.  
  500. Leaves on level one a program that when evaluated will: 
  501. - Check if the HP48 is in Immediate-Entry Mode. 
  502. - If yes, evaluate the level two argument. 
  503. - If not, evaluate the level one argument. 
  504. The resulting program doesn't need to be processed by  EVL. 
  505.  
  506. úÄÄÄÄÄÄÄÄÄÄ¿ 
  507. 3  IFPRGTE 3   (make "IF PRoGram-entry mode Then Else" program) 
  508. àÄÄÄÄÄÄÄÄÄÄù   (see example below) 
  509.  
  510. Needs two arguments: (2:Any, 1:Any). 
  511.  
  512. Leaves on level one a program that when evaluated will: 
  513. - Check if the HP48 is in Program-Entry Mode. 
  514. - If yes, evaluate the level two argument. 
  515. - If not, evaluate the level one argument. 
  516. The resulting program doesn't need to be processed by  EVL. 
  517.  
  518. úÄÄÄÄÄÄÄÄÄÄ¿ 
  519. 3  IFALGTE 3   (make "IF ALGebraic-entry mode Then Else" program) 
  520. àÄÄÄÄÄÄÄÄÄÄù 
  521.  
  522. Needs two arguments: (2:Any, 1:Any). 
  523.  
  524. Leaves on level one a program that when evaluated will: 
  525. - Check if the HP48 is in Algebraic-Entry Mode. 
  526. - If yes, evaluate the level two argument. 
  527. - If not, evaluate the level one argument. 
  528. The resulting program doesn't need to be processed by  EVL. 
  529.  
  530. úÄÄÄÄÄÄÄ¿ 
  531. 3  TDIR 3      (make "Temporary DIRectory" program) 
  532. àÄÄÄÄÄÄÄù      (see example below) 
  533.  
  534. Needs one argument: (1:List). 
  535.  
  536. The List on level one can be either a complete menu list or a list containing 
  537. a string and one, two or three complete menu lists. 
  538. In the first case  TDIR creates a key assignment that once evaluated will 
  539. display the menu specified by the argument. 
  540. In the second case  TDIR creates a menu entry identified by the string as a 
  541. dir-like menu label, and whose functions (unshifted, left-shifted and right- 
  542. shifted) are specified by the other list(s). 
  543.  
  544. úÄÄÄÄÄÄÄ¿ 
  545. 3 TDIR  3      (extract "Temporary DIRectory" from program) 
  546. àÄÄÄÄÄÄÄù 
  547.  
  548. Needs one argument: (1:Program). 
  549.  
  550. This is a command to reverse the operation of TDIR . It does complete error 
  551. checking so an invalid input will cause a "Bad Argument Value" error. 
  552.  
  553. úÄÄÄÄÄÄÄ¿ 
  554. 3 ADDFR 3        (ADD "FReeze" to a program) 
  555. àÄÄÄÄÄÄÄù 
  556.  
  557. Needs two arguments: (2:Any, 1:Real). 
  558.  
  559. Every time program execution finishes, the whole display is updated. This 
  560. action often wastes precious time. Many programs do not modify all the 
  561. display but only a part of it. (e.g. The command SWAP affects only the stack 
  562. area and not the status and the menu areas of the display; the program \<< 
  563. -64 SF \>> doesn't affect the display at all). The ADDFR command adds to the 
  564. object in level two an instruction that freezes the display areas specified 
  565. by the Real on level one. The real must be used as for the built in command 
  566. FREEZE. 
  567.  
  568. úÄÄÄÄÄÄÄ¿ 
  569. 3 'BADK 3        (push "BADKey" program onto stack) 
  570. àÄÄÄÄÄÄÄù 
  571.  
  572. Needs no argument. 
  573.  
  574. Pushes on the stack the sys-RPL instruction DoBadKey that is normally 
  575. associated with all disabled keys. When evaluated it just beeps and freezes 
  576. the screen. 
  577.  
  578.  
  579. The following two commands are not inherent with the User Keyboard but as 
  580. they provide two "smartkey" capabilities, they were included anyway. For 
  581. system-RPL programmers they are also provided in XLIB versions that don't do 
  582. argument checking. Note that the internal SAFE uses the internal DUAL. 
  583.  
  584. úÄÄÄÄÄÄ¿ 
  585. 3 DUAL 3       (branch depending on keyboard or program execution) 
  586. àÄÄÄÄÄÄù       (see example below) 
  587.  
  588. Needs three arguments: (3:Any, 2:Any, 1:String). 
  589.  
  590. Note: DUAL is only useful within programs; it is not useful from the 
  591. keyboard. 
  592.  
  593. If the program containing the DUAL command is executed directly (that is, by 
  594. pressing a menu key or a key to which the program or its name is assigned), 
  595. DUAL evaluates the argument in level two. Otherwise, if the program isn't 
  596. executed directly (that is, by being called from within another program), the 
  597. level three argument will be evaluated. The string on level one must contain 
  598. the name (Global or XLIB) under which the program is stored. 
  599.  
  600. úÄÄÄÄÄÄ¿ 
  601. 3 SAFE 3       (disallow immediate execution of key assignment) 
  602. àÄÄÄÄÄÄù       (see example below) 
  603.  
  604. Needs two arguments: (2:Any, 1:String). 
  605.  
  606. Note: SAFE is only useful within programs; it is not useful from the 
  607. keyboard. 
  608.  
  609. SAFE puts the name of the program on the command line if the program is 
  610. executed directly; otherwise, the level two argument is executed. As for 
  611. DUAL, the string on level one must contain the name of the program. The 
  612. built-in CLVAR key (blue-DEL key) is an example of a "safe" key. 
  613.  
  614. úÄÄÄÄÄÄÄÄÄ¿ 
  615. 3 ABOUTSK 3     (About SmartKeys) 
  616. àÄÄÄÄÄÄÄÄÄù 
  617.  
  618. Needs no arguments. 
  619.  
  620. This is a "DUAL" command: 
  621.  
  622. (1) When executed from the keyboard: 
  623.     Shows the library version and a copyright message. 
  624.  
  625. (2) When executed by a running program: 
  626.     Puts on level one the version string of the library (so SmartKeys-based 
  627.     applications can prevent errors). 
  628.  
  629. úÄÄÄÄÄÄÄÄÄ¿ 
  630. 3 $CONFIG 3      (Hidden) 
  631. àÄÄÄÄÄÄÄÄÄù 
  632.  
  633. Needs no argument. 
  634.  
  635. It's automatically executed after every system-halt. 
  636. It checks if the user flag 49 is set; if yes, it sets the system flags -61 
  637. ([USR] once to lock) and -62 (User Mode active). 
  638. So if you wish to stay in USER mode permanently, set flag 49 and the user 
  639. keyboard will be always active. 
  640.  
  641.  
  642.  
  643.  
  644. 3  - Command Usage Examples 
  645. ííííííííííííííííííííííííííí 
  646.  
  647. The following simple examples demonstrate some possible applications of some 
  648. of the commands contained in the SmartKeys library. 
  649.  
  650.  
  651.  
  652. 3.1   Commands used:  IFPRGTE ASNK 
  653.  
  654.       When not in Program-Entry Mode the command SWAP is usually executed by 
  655.       pressing [ > ]  (key 36.1) so the combination [orange shift]   [ > ] 
  656.       serves no purpose. 
  657.       Now you can assign to [orange shift]  [ > ] a program that, when in 
  658.       Program-Entry Mode, will insert SWAP in the command line as usual but 
  659.       when in Immediate-Entry Mode will implement an OVER. 
  660.  
  661.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  662.         3{HOME}                 3            3{HOME}                 3 
  663.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  664.         34:                     3            34:                     3 
  665.         33:                     3            33:                     3 
  666.         32:                 SWAP3            32:                     3 
  667.         31:                 OVER3            31:                     3 
  668.         3### ### ### ### ### ###3            3### ### ### ### ### ###3 
  669.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  670.       1) Enter the list { SWAP             2) Press  IFPRGTE to 
  671.          OVER } and press OBJ                 obtain the new assignment. 
  672.          followed by DROP to obtain           Press ASNK and then 
  673.          the two commands unevaluated.        the [orange shift]  [ > ] 
  674.                                               key to assign it to that key. 
  675.  
  676.  
  677.  
  678. 3.2   Commands used: STDK  IFCMDTE ASNK 
  679.  
  680.       The [DEL] key serves no purpose when there isn't a command line. 
  681.       Now you can assign to it a program that when the command line is not 
  682.       present will execute LASTARG, otherwise it will behave like the normal 
  683.       [DEL] key. 
  684.  
  685.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  686.         3{HOME}                 3            3{HOME}                 3 
  687.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  688.         34:                     3            34:                     3 
  689.         33:                     3            33:                     3 
  690.         32: External External ..3            32:                     3 
  691.         31:              LASTARG3            31:                     3 
  692.         3### ### ### ### ### ###3            3### ### ### ### ### ###3 
  693.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  694.       1) Press STDK and then               2) Press  IFCMDTE to 
  695.          [DEL] to recall the key              obtain the new [DEL] key 
  696.          routine. Enter the list              assignment. Press ASNK 
  697.          { LASTARG } and press                and then the [DEL] key to 
  698.          OBJ  DROP to obtain the              assign the program in level 
  699.          LASTARG command.                     one to it. 
  700.  
  701.  
  702.  
  703. 3.3   Commands used: KEYN RECK ASNK 
  704.  
  705.       Usually in order to enter a string you need to use the alpha keyboard 
  706.       so every time it takes four (or three) keystrokes: 
  707.  
  708.       [blue-shift]   [ - ]   [alpha]  ( [alpha] ) 
  709.  
  710.       Now you can assign to the key [blue-shift] [ - ] a program that 
  711.       automatically enters the alpha keyboard. 
  712.  
  713.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  714.         3{HOME}                 3            3{HOME}                 3 
  715.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  716.         34:                     3            34:                     3 
  717.         33:                     3            33:                     3 
  718.         32:                     3            32:                     3 
  719.         31:        { 85.3 61.4 }3            31:                     3 
  720.         3### ### ### ### ### ###3            3### ### ### ### ### ###3 
  721.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  722.       1) Enter an empty list, then         2) Press [ENTRY], [RECK] and 
  723.          press KEYN and then                  [ENTER] to convert the list 
  724.          [ - ] and [ 3 ] so to obtain         on level one to the 
  725.          the real number 85.3, press          corresponding keys sequence. 
  726.          [ + ]. Then press KEYN,              Finally press ASNK and 
  727.          [alpha], [ 4 ] so to obtain the      press the [blue-shift] [ - ] 
  728.          real number 61.4, press [ + ].       key so that the program 
  729.          (If you keep flag -60 set,           in level one is assigned to 
  730.          use 61.1, not 61.4).                 that key. 
  731.  
  732.  
  733.  
  734. 3.4   Commands used:  PSH  EVL  IFPRGTE  EDIT  IFCMDTE 
  735.  
  736.       Now it's time to build yourself the silliest key assignment ever seen: 
  737.  
  738.       It checks if there is the command line and: 
  739.        - if not, it will start the command line with the string "STARTcmd". 
  740.        - if yes, it checks if Program-Entry Mode is active and: 
  741.                - if yes, it will push to the first level the string "PRGon". 
  742.                - if not, it will evaluate the program \<< "PRG" "off" + \>>. 
  743.  
  744.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  745.         3{HOME}                 3            3{HOME}                 3 
  746.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  747.         34:                     3            34:                     3 
  748.         33:                     3            33:                     3 
  749.         32:                     3            32:              "PRGon"3 
  750.         31:              "PRGon"3            31:\<< "PRG" "off" + \>>3 
  751.         3### ### ### ### ### ###3            3### ### ### ### ### ###3 
  752.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  753.       1) Enter the string "PRGon"          2) Enter the program \<< "PRG" 
  754.          and press  PSH to                    "off" + \>> and press 
  755.          make it pushable.                     EVL to make it evaluable. 
  756.  
  757.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  758.         3{HOME}                 3            3{HOME}                 3 
  759.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  760.         34:                     3            34:                     3 
  761.         33:                     3            33:                     3 
  762.         32:                     3            32: External External ..3 
  763.         31: External External ..3            31: "STARTcmd" Externa..3 
  764.         3### ### ### ### ### ###3            3### ### ### ### ### ###3 
  765.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  766.       3) Press  IFPRGTE.                   4) Enter the string "STARTcmd" 
  767.                                               and press  EDIT to 
  768.                                               make it editable. 
  769.  
  770.         úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿            úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  771.         3{HOME}                 3            3{HOME}                 3 
  772.         ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'            ~AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  773.         34:                     3            34:                     3 
  774.         33:                     3            33:                     3 
  775.         32:                     3            32:                     3 
  776.         31: External External ..3            31:                     3 
  777.         3### ### ### ### ### ###3            3SILLY #################3 
  778.         àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù            àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  779.       5) Press  IFCMDTE to                 6) I don't think you want to 
  780.          obtain your brand new                waste a key for such a 
  781.          smart key.                           stupid assignment so: 
  782.                                               Enter the string "SILLY", 
  783.                                               implement SWAP 2  LIST 1 
  784.                                                LIST to store the program 
  785.                                               and the string in a menu 
  786.                                               and finally press TMENU. 
  787.  
  788.  
  789.  
  790. 3.5   Command used: SAFE 
  791.  
  792.       The following is a Safe program that purges the graphic display: 
  793.  
  794.       %%HP: T(3); 
  795.       \<< 
  796.       \<< PICT PURGE \>>   @  The 'dangerous' code. 
  797.       "PPICT"              @  The name used to store this entire program. 
  798.       SAFE 
  799.       \>> 
  800.  
  801.       Download (or type in) this program and store it with the name 'PPICT'. 
  802.  
  803.  
  804.  
  805. 3.6   Command used: DUAL 
  806.  
  807.       The following is a "dual" program that puts "From Keyboard" on level 1 
  808.       if executed from the keyboard, or "From Program" if executed from a 
  809.       program: 
  810.  
  811.       %%HP: T(3); 
  812.       \<< 
  813.       "From Program"     @ the code to execute if called by a program 
  814.       "From Keyboard"    @ the code to execute if called from keyboard 
  815.       "EX3.6"            @ the name used to store this entire program 
  816.       DUAL 
  817.       \>> 
  818.  
  819.       Download (or type in) this program and store it with the name 'EX3.6'. 
  820.       If you press the 'EX3.6' menu key, you'll see "From Keyboard".  But 
  821.       press << EX3.6 >> ENTER, then EVAL will produce "From Program". 
  822.  
  823.  
  824. 3.7   Command used:  TDIR 
  825.  
  826.       The following program, once downloaded to a 48 and evaluated will put 
  827.       two silly menu entries on the stack. Do  TDIR on each one to obtain two 
  828.       dir-like menu entries, then finally execute 2  LIST TMENU and take a 
  829.       look at the menu that will be displayed.  (Remember that the LAST MENU 
  830.       key can be pressed to "back up" to the "temporary directory" menu after 
  831.       pressing NUMB or ALPHA). 
  832.  
  833.       %%HP: T(3); 
  834.       {                   @ begin 1st menu entry 
  835.       "NUMB"              @ the 1st menu label 
  836.       { 1 2 3 4 5 }       @ the menu displayed by the 1st unshifted key 
  837.       { -1 -2 -3 -4 -5 }  @ the menu displayed by the 1st left-shifted key 
  838.       }                   @ end 1st menu entry 
  839.       {                   @ begin 2nd menu entry 
  840.       "ALPHA: Alphabet"   @ the 2nd menu label 
  841.       { A B C D E F G H } @ the menu displayed by the 2nd unshifted key 
  842.       { I J K L M N O P } @ the menu displayed by the 2nd left-shifted key 
  843.       { Q R S T U V W X } @ the menu displayed by the 2nd right-shifted key 
  844.       }                   @ end 2nd menu entry 
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852. 4  - Some useful information 
  853. íííííííííííííííííííííííííííí 
  854.  
  855.  
  856. 4.1   The Internal UserKeys list 
  857.  
  858. When no keys are assigned to the user keyboard, the internal UserKeys list is 
  859. empty. When one or more assignments are active, the internal UserKeys list 
  860. contains forty nine lists, each of which can be an empty list (if the key has 
  861. no assignments) or a six element list (if the key has one or more 
  862. assignments). Each of these six elements is the object assigned to the key in 
  863. keyplane order, or an empty list if that keyplane has no assignment. 
  864.  
  865. Example: Assuming that no keys are assigned, when you assign the command % to 
  866.          the key DEF your internal UserKeys list will look like this: 
  867.  
  868.          { {} {} {} {} {} {} 
  869.            {} {} {} {} {} {} 
  870.            {} {{}%{}{}{}{}} {} {} {} {} 
  871.            {} {} {} {} {} {} 
  872.            {} {} {} {} {} 
  873.            {} {} {} {} {} 
  874.            {} {} {} {} {} 
  875.            {} {} {} {} {} 
  876.            {} {} {} {} {} } 
  877.  
  878.  
  879.  
  880. 4.2   Unused and Useless HP48 Default Key Assignments 
  881.  
  882. In order to take full advantage of the SmartKeys library you may want to know 
  883. what the gaps in the HP48 default key assignments are, so you can fill them 
  884. with your own key definitions. If so, the following table will help you. 
  885.  
  886.  
  887.           úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  888.           3UNUSED AND USELESS HP48 DEFAULT KEY ASSIGNMENTS v 1.13 
  889.           ~AÄÄÄÄÄÄÄÄÄÄÄââÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄââÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' 
  890.           3 ENTRY     33        UNUSED       33   ? USELESS ?   3 
  891.           3 MODE      3~AÄÄÄÄÄÄâÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÄÄÄâÄÄÄÄÄÄÄ' 
  892.           3           33 NUMB 3  SPECIFICAT. 33 NUMBER  3 SPECS 3 
  893.           ~AÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ' 
  894.           3 IMMEDIATE 33 25.3 3 BlShft-up    33 34.1or2 3 GRAPH 3 
  895.           3 ENTRY     33 34.3 3 BlShft-left  33 36.1or2 3 SWAP  3 
  896.           3 MODE      33 36.3 3 BlShft-right 33 55.1or2 3 DROP  3 
  897.           3 &  NO     33 51.4 3 alpha-ENTER  33 91.2or5 3 CONT  3 
  898.           3 COMMAND   33 54.1 3 DEL          33 91.3or6 3 OFF   3 
  899.           3 LINE      33 54.4 3 alpha-DEL    33 92.3    3       3 
  900.           3           33 55.4 3 alpha-BckSpc 33 93.2    3 ,     3 
  901.           3           33 62.5 3 ` accent     33 93.3    3  <-'  3 
  902.           3           33 62.6 3 ' accent     33 94.1    3 SPC   3 
  903.           3           33 63.5 3 ^ accent     33 94.3    3 \<)   3 
  904.           3           33 63.6 3 ~ accent     33         3       3 
  905.           3           33 64.5 3 " accent     33         3       3 
  906.           3           33 64.6 3 etc. accent  33         3       3 
  907.           ~AÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ' 
  908.           3 IMMEDIATE 33      3              33 34.2    3 GRAPH 3 
  909.           3 ENTRY     33      3              33 36.2    3 SWAP  3 
  910.           3 MODE      33      3              33 55.2    3 DROP  3 
  911.           3   &       33      3              33 91.2or5 3 CONT  3 
  912.           3 COMMAND   33      3              33 91.3or6 3 OFF   3 
  913.           3 LINE      33      3              33 92.3    3       3 
  914.           ~AÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ' 
  915.           3 PROGRAM   33 52.3 3 VISIT        33 51.2or3 3 DUP   3 
  916.           3 ENTRY     33 53.2 3 2D           33 91.2or5 3 CONT  3 
  917.           3 MODE      33 53.3 3 3D           33 91.3or6 3 OFF   3 
  918.           3           33 62.3 3 solver       33         3       3 
  919.           3           33 64.3 3 eq catalog   33         3       3 
  920.           3           33 72.3 3 alrm catalog 33         3       3 
  921.           àÄÄÄÄÄÄÄÄÄÄÄááÄÄÄÄÄÄáÄÄÄÄÄÄÄÄÄÄÄÄÄÄááÄÄÄÄÄÄÄÄÄáÄÄÄÄÄÄÄù 
  922.  
  923.  
  924.  
  925. 4.3  Another suggestion for keys-hungry HP48 users 
  926.  
  927. The following method is somewhat tricky and requires a little familiarity 
  928. with system-RPL but will allow you to gain four unshifted 'keys' and a lot of 
  929. shifted keys on your user keyboard. 
  930.  
  931. If you press the key MTH, PRG, CST or VAR the corresponding menu will be 
  932. displayed, but now you will not need that key any more, so you can use this 
  933. key for your own purpose. To do this you have to assign to it a simple 
  934. system-RPL program that will check if the menu is displayed, if not it will 
  935. display it, if yes it will do something else (the best thing would be to 
  936. display another menu). 
  937.  
  938. Examples: 1) I use frequently the library menu and I don't like to press two 
  939.              keys to reach it so I created an assignment for the key CST that 
  940.              allow me to toggle between the two menus as described by the 
  941.              following scheme: 
  942.  
  943.                                       úÄÄÄ>>ÄÄÄ CUSTOM menu ÄÄÄÄ>>ÄÄÄ¿ 
  944.                                       3                              3 
  945.                                  Press [CST]                    Press [CST] 
  946.                                       3                              3 
  947.                                       àÄÄÄ<<ÄÄÄ LIBRARY menu ÄÄÄ<<ÄÄÄù 
  948.  
  949.              If I press [CST] once the Custom menu will be displayed but if I 
  950.              press it twice the Library menu will be displayed (and so on). 
  951.  
  952.              It follows the system-RPL program in ASC format. 
  953.  
  954. %%HP:; 
  955. "D9D20A5804432B34A8143A4467A226B58147A22664B308DA16F6EA327BA3AC1A 
  956. 3B2130A1D7" 
  957.  
  958.  
  959.           2) It's common knowledge that libraries are better than directories 
  960.              and so, when it's possible, I use libraries, but in many cases I 
  961.              can't. For this reason my dir-tree is somewhat immense. Every 
  962.              time I move into it I hate to press [orange-shift] [UPDIR] or 
  963.              [blue-shift] [HOME] so I've tried to find a solution to this. 
  964.              The following two programs work like the preceding one but 
  965.              instead of toggling between two menus they toggle between a 
  966.              menu and an instruction. The way to implement this is more 
  967.              tricky but as in the preceeding example the resulting programs 
  968.              are easily modifiable. 
  969.  
  970.              The following program must be assigned to the MTH key. 
  971.              It toggles between the MTH menu and the UPDIR instruction. 
  972.  
  973. %%HP:; 
  974. "D9D20A5804432B34A8143A44698226DA916D9D2075DA3AC1A3B213079E60B51A 
  975. 15E4049B314AC1A3B2130CADF" 
  976.  
  977.              The following program must be assigned to the PRG key. 
  978.              It toggles between the PRG menu and the HOME instruction. 
  979.  
  980. %%HP:; 
  981. "D9D20A5804432B34A8143A44635040A3D36D9D20A1EA3AC1A3B213079E60041A 
  982. 15E4049B314AC1A3B21307CAD" 
  983.  
  984.  
  985.                        <><><><><><><><><><><><><><> 
  986.  
  987. Happy Assigning 
  988.  
  989.  
  990.                                                   RAP 
  991.